package kr.pe.johnkim.checkmileage.mobile.rest.dao;

import kr.pe.johnkim.checkmileage.mobile.domain.CheckMileageMileage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import java.util.List;

/**
 * Check Mileage 마일리지 관련 DAO 메소드들을 구현하는 클래스 이다.
 * 
 * @author : johnkim <cale9797@gmail.com / Bettersoft, Inc.>
 * @Date : 12. 7. 25
 */
public class CheckMileageMileageDaoImpl extends SqlMapClientDaoSupport implements CheckMileageMileageDao {

    // SLF4J Logging
	private Logger logger = LoggerFactory.getLogger(CheckMileageMileageDaoImpl.class);

    /**
     * 기존에 등록된 마일리지가 있는지 확인 한다.
     *
     * @param checkMileageMileage
     * @return
     */
    @Override
    public CheckMileageMileage checkMileageExist(CheckMileageMileage checkMileageMileage) {
        logger.info("checkMileageExist");

        return (CheckMileageMileage)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MILEAGES.checkMileageExist", checkMileageMileage);
    }

    /**
     * 기존에 가맹점에 등록된 사용자의 마일리지를 가져 온다.
     *
     * @param checkMileageMileage
     * @return
     */
    @Override
    public CheckMileageMileage selectMemberMileage(CheckMileageMileage checkMileageMileage) {
        logger.info("selectMemberMileage");

        return (CheckMileageMileage)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MILEAGES.selectMemberMileage", checkMileageMileage);
    }

    /**
     * 마일리지를 등록 한다.
     *
     * @param checkMileageMileage
     */
    @Override
    public void registerMileage(CheckMileageMileage checkMileageMileage) {
        logger.info("registerMileage");

        getSqlMapClientTemplate().insert("CHECKMILEAGE_MILEAGES.registerMileage", checkMileageMileage);
    }

    /**
     * 마일리지 점수를 업데이트 한다.
     *
     * @param checkMileageMileage
     */
    @Override
    public void updateMileage(CheckMileageMileage checkMileageMileage) {
        logger.info("updateMileage");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MILEAGES.updateMileage", checkMileageMileage);
    }

    /**
     * 사용자의 마일리지 목록을 가져 온다. 사용자 smart phone 에 출력.
     *
     * @param checkMileageMileage
     * @return
     */
    @Override
    public List<CheckMileageMileage> selectMemberMerchantMileageList(CheckMileageMileage checkMileageMileage) {
        logger.info("selectMemberMerchantMileageList");

        return this.getSqlMapClientTemplate().queryForList("CHECKMILEAGE_MILEAGES.selectMemberMerchantMileageList", checkMileageMileage);
    }

    /**
     * 가맹점 고객의 마일리지 목록을 가져 온다. 가맹점 tablet PC/iPad 에 출력.
     *
     * @param checkMileageMileage
     * @return
     */
    @Override
    public List<CheckMileageMileage> selectMerchantMemberMileageList(CheckMileageMileage checkMileageMileage) {
        logger.info("selectMerchantMemberMileageList");

        return this.getSqlMapClientTemplate().queryForList("CHECKMILEAGE_MILEAGES.selectMerchantMemberMileageList", checkMileageMileage);
    }

    /**
     * 마일리지를 비활성화 한다. 사용자가 서비스 탈퇴 시 관련 정보 비활성화.
     *
     * @param checkMileageMileage
     */
    @Override
    public void updateDeactivateMileage(CheckMileageMileage checkMileageMileage) {
        logger.info("updateDeactivateMileage");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MILEAGES.updateDeactivateMileage", checkMileageMileage);
    }

    /**
     * 사용자의 가장 최근에 등록된 마일리지 아이디를 가져 온다.
     *
     * @param checkMileageMileage
     * @return
     */
    @Override
    public CheckMileageMileage selectMileageId(CheckMileageMileage checkMileageMileage) {
        logger.info("selectMileageId");

        return (CheckMileageMileage)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MILEAGES.selectMileageId", checkMileageMileage);
    }
}
